package com.eight.cloud.job.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.eight.cloud.job.entity.ExecutionJobEntity;
import com.eight.cloud.job.model.dto.ExecutionJobDto;
import com.eight.cloud.job.model.dto.ExecutionJobQueryDto;
import com.eight.cloud.job.model.vo.JobDataMapVo;
import com.eight.cloud.mybatisplus.service.IBaseService;
import org.quartz.SchedulerException;

import java.util.List;

/**
 * @InterfaceName: IExecutionJobService
 * @Author: TXC
 * @Date: 2025-02-25 10:09
 **/
public interface IExecutionJobService extends IBaseService<ExecutionJobEntity> {

    /**
     * 初始化定时任务
     */
    void initExecutionJob() throws SchedulerException;

    /**
     * 添加一个定时任务
     * @param executionJob 任务信息
     */
    void addCronJob(ExecutionJobDto executionJob) throws SchedulerException;

    /**
     * 修改一个定时任务
     * @param executionJob 任务信息
     */
    void updateCronJob(ExecutionJobDto executionJob) throws SchedulerException;

    /**
     * 立即执行一次
     * @param uuid 任务id
     */
    void execute(String uuid) throws SchedulerException;

    /**
     * 暂停任务
     * @param uuid 任务id
     */
    void pauseJob(String uuid) throws SchedulerException;

    /**
     * 恢复任务
     * @param uuid 任务id
     */
    void resumeJob(String uuid) throws SchedulerException;

    /**
     * 删除job
     * @param uuid 任务id
     */
    void deleteJob(String uuid) throws SchedulerException;

    /**
     * 获取任务执行信息
     * @param uuid 执行任务uuid
     * @return 任务执行信息
     */
    JobDataMapVo fetchJobDataMap(String uuid);

    void fetchPageJobDataMap(IPage<JobDataMapVo> page, ExecutionJobQueryDto queryDto);

    /**
     * 删除job
     * @param jobIds 任务id集合
     */
    void deleteJob(List<String> jobIds);
}
